package com.sys.function;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sys.readdata.Data;
import com.sys.readdata.Parser;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.sys.common.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/upload")
public class Upload {

    // 设置固定的日期格式
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    // 将 yml 中的自定义配置注入到这里
   // 文件保存在项目下的src\main\data目录中
    private String filePath=System.getProperty("user.dir")+"\\src\\main\\data\\" ;
    // 日志打印
    private Logger log = LoggerFactory.getLogger("FileController");

    // 文件上传 （可以多文件上传）
    @PostMapping("/file")
    public Result<Map<String, Object>>  fileUploads(HttpServletRequest request, @RequestParam("file") MultipartFile file) throws IOException {
        // 得到格式化后的日期
        String format = sdf.format(new Date());
        // 获取上传的文件名称
        String fileName = file.getOriginalFilename();
        // 时间 和 日期拼接
        String newFileName = format + "_" + fileName;
        // 得到文件保存的位置以及新文件

        File dest = new File(filePath + newFileName);
        try {
            // 上传的文件被保存了
            file.transferTo(dest);
            // 打印日志
            log.info("上传成功，当前上传的文件保存在 {}",filePath + newFileName);
            // 自定义返回的统一的 JSON 格式的数据，可以直接返回这个字符串也是可以的。
            //获得上传的文件类型，前端可接受的类型为xml和xls和xlsx
            Data data=new Data();
            String file_type=newFileName.substring(newFileName.length()-4);
            if (file_type.equals(".xml")){
                data=Parser.parseXML(filePath + newFileName);
            }else if (file_type.equals(".xls") || file_type.equals("xlsx")){
                data=Parser.parseExcel(filePath + newFileName);
            }else if (file_type.equals("json")) {
                data=Parser.parseJson(filePath + newFileName);
            }
            if (data!=null){
                Map<String, Object> returndata = new HashMap<>();
                ObjectMapper objectMapper = new ObjectMapper();
                String jsonString = objectMapper.writeValueAsString(data);
                returndata.put("data", jsonString);
                System.out.println(jsonString);
                return Result.success(returndata);
            }else {
                System.out.println("解析数据错误！");
            }

            return Result.fail("上传错误");

        } catch (IOException e) {
            log.error(e.toString());
        }
        // 待完成 —— 文件类型校验工作
        return Result.fail("上传错误");
    }

}
